"""
!/usr/bin/env python
-*- coding: utf-8 -*-
@Author  : MarkJia
@Site    : 
@File    : 17、fixture中yied关键字.py
"""
import pytest

"""
conftest.py 文件是不需要导入的。
conftest.py 必须在 Package 中
conftest.py 和 pytest.ini 放在项目根目录

1、可以通过 方法名字传递到测试用例
2、使用 fixture 的名字来调用返回数据
3、yield 来激活 teardown
4、比 setup/teardown 更灵活
"""

# 操作顺序如下：
"""
1、定义
@pytest.fixture()
def filename():
    setup操作
    yield 返回值
    teardown操作
"""


@pytest.fixture(scope='class')
def login():
    # setup 操作
    print('完成登录操作')
    # 函数使用时，会调用两次 --> 生成器
    yield  # 相当于 return , 暂停：记住你上一次的执行位置
    # teardown 操作
    print('完成登出操作')


# 二：以下函数都需要先登录，调用时直接传入login
def test_serch(login):
    print('搜素')  # 返回：完成登录操作  搜索   完成登出操作


def test_cart(login):
    print('购物车')


def test_order(login):
    print('下单')


# 结果：
# 在类开始前，完成登录操作
# 在类结束后，完成登出操作

class Testdemo:
    def test_case1(self, login):
        print('case1')

    def test_case2(self, login):
        print('case2')


# 实际返回token   实际相当于函数的return返回

@pytest.fixture()
def get_token():
    print('登录成功')
    username = 'MackJia'
    token = '931585776884645888'
    yield token, username  # 元组 ( )
    print('登出成功')


"""

登录成功
PASSED              [100%]获取到的token为:931585776884645888,username为：MackJia
登出成功

"""


# 函数使用装饰器返回值时，即使装饰器开启 autouse=True 。也需要传递参数
def test_token_with_username(get_token):
    token, username = get_token
    # 返回的结果：获取到的token为:931585776884645888,username为：MackJia
    print(f'获取到的token为:{token},username为：{username}')
